Класс System.Collections.ObjectModel.ObservableCollection<T>
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Класс ObservableCollection<T> представляет динамическую коллекцию данных, которая предоставляет уведомления при добавлении или удалении элементов или при обновлении всего списка.
Во многих случаях данные, с которыми вы работаете, являются коллекцией объектов. Например, распространенный сценарий в привязке данных заключается в использовании ItemsControl такого типа, как , ListViewListBoxили TreeView для отображения коллекции записей.
Можно перечислить любую коллекцию, которая реализует интерфейс IEnumerable. Однако чтобы настроить динамические привязки таким образом, чтобы вставки и удаления элементов в коллекции автоматически обновляли пользовательский интерфейс, в коллекции должен быть реализован интерфейс INotifyCollectionChanged. Этот интерфейс предоставляет CollectionChanged событие, событие, которое должно вызываться при изменении базовой коллекции.
Класс ObservableCollection<T> — это тип сбора данных, реализующий INotifyCollectionChanged интерфейс.
Перед реализацией собственной коллекции рассмотрите возможность использования ObservableCollection<T> или одного из существующих классов коллекций, таких как List<T>, Collection<T> и BindingList<T>, среди многих других. Если у вас есть расширенный сценарий и вы хотите реализовать собственную коллекцию, рассмотрите возможность использования IList, которая предоставляет не универсальную коллекцию объектов, к которым можно получить отдельный доступ по индексу. Реализация IList обеспечивает лучшую производительность подсистемы привязки данных.
Примечание.
Для полной поддержки передачи значений данных из исходных объектов привязки в целевые объекты привязки каждый объект в коллекции, поддерживающий привязываемые свойства, должен реализовать соответствующий механизм уведомления об изменении свойства, INotifyPropertyChanged например интерфейс.
Дополнительные сведения см. в разделе "Привязка к коллекциям" в обзоре привязки данных.
Заметки об использовании XAML
ObservableCollection<T> можно использовать в качестве элемента объекта XAML в Windows Presentation Foundation (WPF), в версиях 3.0 и 3.5. Однако использование имеет существенные ограничения.
ObservableCollection<T> должен быть корневым элементом, так как
x:TypeArguments
атрибут, который должен использоваться для указания ограниченного типа универсального ObservableCollection<T> элемента, поддерживается только в элементе объекта для корневого элемента.Необходимо объявить
x:Class
атрибут (который подразумевает, что действие сборки для этого XAML-файла должно бытьPage
или другим действием сборки, скомпилированным XAML).ObservableCollection<T> находится в пространстве имен и сборке, которые изначально не сопоставлены с пространством имен XML по умолчанию. Необходимо сопоставить префикс для пространства имен и сборки, а затем использовать этот префикс в теге элемента объекта для ObservableCollection<T>.
Более простой способ использования ObservableCollection<T> возможностей из XAML в приложении заключается в объявлении собственного не универсального пользовательского класса коллекции, который наследуется от ObservableCollection<T>и ограничивает его определенным типом. Затем сопоставляйте сборку, содержащую этот класс, и ссылайтесь на нее как элемент объекта в XAML.